package com.xiaoming.e3mall.content.service.impl;

import com.xiaoming.e3mall.common.pojo.EasyUITreeNode;
import com.xiaoming.e3mall.common.utils.E3Result;
import com.xiaoming.e3mall.content.service.ContentCategoryService;
import com.xiaoming.e3mall.mapper.TbContentCategoryMapper;
import com.xiaoming.e3mall.pojo.TbContentCategory;
import com.xiaoming.e3mall.pojo.TbContentCategoryExample;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 前台首页,页面划分的区域的分类管理
 */

@Service
public class ContentCategoryServiceImpl implements ContentCategoryService {

    @Autowired
    private TbContentCategoryMapper contentCategoryMapper;

    /**
     * 加载商品分类
     */
    @Override
    public List<EasyUITreeNode> getContentCategoryList(Long parentId) {

        //1.根据parentId查询tb_content_category，查询子节点列表。

        //设置查询条件
        TbContentCategoryExample example = new TbContentCategoryExample();
        TbContentCategoryExample.Criteria criteria = example.createCriteria();
        criteria.andParentIdEqualTo(parentId);

        //执行查询
        List<TbContentCategory> contentCategoryList = contentCategoryMapper.selectByExample(example);
        //将查询出来的结果包装成前端页面需要的 EasyUITreeNode
        List<EasyUITreeNode> nodeList = new ArrayList<>();
        for (TbContentCategory contentCategory : contentCategoryList) {
            EasyUITreeNode node = new EasyUITreeNode();
            node.setId(contentCategory.getId());
            node.setText(contentCategory.getName());
            node.setState(contentCategory.getIsParent()?"closed":"open");
            //添加到list中
            nodeList.add(node);
        }
        return nodeList;
    }

    /**
     * 添加商品分类
     */
    @Override
    public E3Result addContentCategory(Long parentId, String name) {
        //在前端界面结束编辑之后,会判断是新增还是更新,新增的话这里会传过来 parentId 跟name两个参数
        //我们这里的是由表现层 contorller传过来的 这里执行新增操作

        //创建新增的分类对象 并补全数据  设置了主键自增(返回自增长)
        TbContentCategory contentCategory = new TbContentCategory();
        contentCategory.setIsParent(false);
        contentCategory.setName(name);
        contentCategory.setParentId(parentId);
        //排列序号，表示同级类目的展现次序，如数值相等则按名称次序排列。取值范围:大于零的整数
        contentCategory.setSortOrder(1);
        //状态。可选值:1(正常),2(删除)
        contentCategory.setSortOrder(1);
        contentCategory.setCreated(new Date());
        contentCategory.setUpdated(new Date());
        //持久化到数据库
        contentCategoryMapper.insert(contentCategory);

        //因为新增了一个叶子节点,要判断原先的父节点是不是叶子节点如果是的话改为父节点
        TbContentCategory parentCategory = contentCategoryMapper.selectByPrimaryKey(parentId);
        if(!parentCategory.getIsParent()){
            parentCategory.setIsParent(true);
            //更新到数据库
            contentCategoryMapper.updateByPrimaryKey(parentCategory);
        }

        //因为我们设置了返回主键自增长所以上面的分类对象中存在我们想要的id属性
        //直接返回就行
        return E3Result.ok(contentCategory);
    }

    /**
     *更新首页分类信息(重命名)
     */
    @Override
    public E3Result updateContentCategory(long id, String name) {
        //根据id查出来 更改名称
        TbContentCategory contentCategory = contentCategoryMapper.selectByPrimaryKey(id);
        contentCategory.setName(name);
        //创建返回值对象
        return E3Result.ok(contentCategory);
    }

    /**
     * 删除前台分类节点
     */
    @Override
    public E3Result deleteContentCategory(Long id) {
        //我们确认传过来的是叶子节点,所以直接删除就行
        //但是还要判断他的父节点是否还有子节点,如果没有那就变成叶子节点

        System.out.println("delete");

        //先查出父节点
        TbContentCategory parentCategory = contentCategoryMapper.selectByPrimaryKey(id);
        Long parentId = parentCategory.getParentId();
        //删除子节点
        contentCategoryMapper.deleteByPrimaryKey(id);
        TbContentCategoryExample example = new TbContentCategoryExample();
        TbContentCategoryExample.Criteria criteria = example.createCriteria();
        criteria.andParentIdEqualTo(parentId);
        int count = contentCategoryMapper.countByExample(example);
        if(count==0){
            //没有子节点了
            parentCategory.setIsParent(false);
            //更新
            contentCategoryMapper.updateByPrimaryKey(parentCategory);
        }

        return E3Result.ok(parentCategory);
    }


}
